home *** CD-ROM | disk | FTP | other *** search
- /**
- GRAB Graph Layout and Browser System
-
- Copyright (c) 1989, Tera Computer Company
- **/
-
- # include "runtime.h"
-
- /* Call allocobj or allocaobj after first saving at least those registers */
- /* not preserved by the C compiler. The register used for return values */
- /* is not saved, since it will be clobbered anyway. */
- asm(" .text");
- asm(" .globl __allocobj");
- asm(" .globl __allocaobj");
- asm(" .globl _allocobj");
- asm(" .globl _allocaobj");
-
- # ifdef M68K
- asm("_allocobj:");
- asm(" link a6,#0");
- asm(" movl d1,sp@-");
- asm(" movl a0,sp@-");
- asm(" movl a1,sp@-");
- asm(" movl sp@(20),sp@-");
- asm(" jbsr __allocobj");
- asm(" addl #4,sp");
- asm(" movl sp@+,a1");
- asm(" movl sp@+,a0");
- asm(" movl sp@+,d1");
- asm(" unlk a6");
- asm(" rts");
-
- asm("_allocaobj:");
- asm(" link a6,#0");
- asm(" movl d1,sp@-");
- asm(" movl a0,sp@-");
- asm(" movl a1,sp@-");
- asm(" movl sp@(20),sp@-");
- asm(" jbsr __allocaobj");
- asm(" addl #4,sp");
- asm(" movl sp@+,a1");
- asm(" movl sp@+,a0");
- asm(" movl sp@+,d1");
- asm(" unlk a6");
- asm(" rts");
- # endif
-
- # ifdef I386
- asm(".data");
- asm("gc_ret_value: .word 0");
- asm(".word 0");
- asm(".text");
-
- asm("_allocaobj:");
- asm("pushl %ebp");
- asm("movl %esp,%ebp");
- asm("pushal");
- asm("pushl 8(%ebp)"); /* Push orignal argument */
- asm("call __allocaobj");
- asm("popl %ecx");
- asm("movl %eax,gc_ret_value"); /* Save return value */
- asm("popal");
- asm("movl gc_ret_value,%eax");
- asm("leave");
- asm("ret");
-
- asm("_allocobj:");
- asm("pushl %ebp");
- asm("movl %esp,%ebp");
- asm("pushal");
- asm("pushl 8(%ebp)"); /* Push orignal argument */
- asm("call __allocobj");
- asm("popl %ecx");
- asm("movl %eax,gc_ret_value"); /* Save return value */
- asm("popal");
- asm("movl gc_ret_value,%eax");
- asm("leave");
- asm("ret");
- # endif
-
- # ifdef SPARC
- asm("_allocaobj:");
- asm(" ba __allocaobj");
- asm(" nop");
- asm("_allocobj:");
- asm(" ba __allocobj");
- asm(" nop");
-
- # include <sun4/trap.h>
- asm(" .globl _save_regs_in_stack");
- asm("_save_regs_in_stack:");
- asm(" t 0x3 ! ST_FLUSH_WINDOWS");
- asm(" mov %sp,%o0");
- asm(" retl");
- asm(" nop");
- # endif
-
- # ifdef VAX
- asm("_allocobj:");
- asm(".word 0x3e");
- asm("pushl 4(ap)");
- asm("calls $1,__allocobj");
- asm("ret");
- asm("_allocaobj:");
- asm(".word 0x3e");
- asm("pushl 4(ap)");
- asm("calls $1,__allocaobj");
- asm("ret");
- # endif
-
- # if !defined(VAX) && !defined(M68K) && !defined(SPARC) && !defined(I386)
- --> fix it
- # endif
-